package cn.xiongxf.controller;

import cn.xiongxf.domain.User;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
// 当前类统一托底方法
@DefaultProperties(defaultFallback = "fallbackMethod")
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;  // 服务通信工具类

    /**
     * Order服务接口
     * @return
     */
    @GetMapping("getById/{id}")
    // 标记方法熔断，当远程服务调用出现异常，或是方法本身出现异常，会触发托底方法fallbackMethod
    @HystrixCommand
    public Object getById(@PathVariable Long id){
        //String url = "http://localhost:1020/getById/" + id;
        // 将IP地址改为User服务的应用名称
        String url = "http://user-server/getById/" + id;
        // 使用服务通信工具类发送请求调用User接口
        return restTemplate.getForObject(url,User.class);
    }


    // 统一托底方法
    public Object fallbackMethod(){
        return new User(-1L,"服务熔断触发","User服务不可用！");
    }
}
